import path from 'path';
import fs from 'fs-extra';
import log4js from 'log4js';
import cmd from './cmd';

const appenders = []; // 配置

// 清除默认日志配置
log4js.clearAppenders();

function addLogger(level, appender) {
    // 级别需要加过滤配置
    if (typeof level === 'string') {
        appenders.push({
            type: 'logLevelFilter',
            level,
            appender,
        });
    } else appenders.push(appender);
}

// 控制台日志（调试用）
if (cmd.consoleLog) {
    addLogger(cmd.consoleLog, {
        type: 'console',
        layout: {
            type: 'pattern', // 尽量简短
            pattern: '%[%r [%5p] -%] %m',
        },
    });
}
// 文件日志（调试用）
if (cmd.fileLog) {
    const fn = path.resolve(process.cwd(), `${cmd.logName}.log`);
    // 先删除之前的文件（似乎无法通过配置清除之前的内容）
    if (fs.existsSync(fn)) {
        fs.unlinkSync(fn);
    }
    addLogger(cmd.fileLog, {
        type: 'file',
        filename: fn,
    });
}
// 滚动日志
/* eslint no-console: 0 */
if (cmd.rollLog) {
    // 创建日志目录
    if (!fs.existsSync(cmd.logDir)) {
        try {
            fs.mkdirsSync(cmd.logDir);
            console.log('create logging dir: %s', cmd.logDir);
        } catch (ex) {
            console.error('failed to create logging dir: ', ex);
            process.exit(1);
        }
    }
    // 生成日志默认级别为INFO
    if (typeof cmd.rollLog === 'boolean') {
        cmd.rollLog = 'INFO';
    }
    addLogger(cmd.rollLog, {
        type: 'dateFile',
        pattern: '-yyyy-MM-dd.log', // 按日期命名
        alwaysIncludePattern: true, // 文件名始终带日期
        filename: path.resolve(cmd.logDir, cmd.logName),
    });
}

// 日志配置
if (appenders.length) {
    log4js.configure({appenders});
}
export default log4js.getLogger();
